/**
 * 
 */
package model;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Jpeg;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * @author andris
 *
 */
public class Bestellung {

	private int auftragsnummer;
	
	private String status;
	
	private double versandkosten;
	
	private Datum bestelldatum;
	
	private Kunde auftraggeber;
	
	private Mitarbeiter sachbearbeiter;
	
	private List<Bestellposten> posten;

	/**
	 * erzeugt eine neue Bestellung
	 * 
	 * @param auftragsnummer
	 * @param status
	 * @param versandkosten
	 * @param bestelldatum
	 * @param auftraggeber
	 * @param sachbearbeiter
	 * @param posten
	 */
	public Bestellung(int auftragsnummer, String status, double versandkosten,
			Datum bestelldatum, Kunde auftraggeber, Mitarbeiter sachbearbeiter,
			List<Bestellposten> posten) {
		this.auftragsnummer = auftragsnummer;
		this.status = status;
		this.versandkosten = versandkosten;
		this.bestelldatum = bestelldatum;
		this.auftraggeber = auftraggeber;
		this.sachbearbeiter = sachbearbeiter;
		this.posten = posten;
	}


	public Bestellung() {
		// TODO Auto-generated constructor stub
	}


	public double getPreis(){
		
		double preis = versandkosten;
		
		for(Bestellposten bestellposten : posten){
			preis += bestellposten.getPreis();
		}
		
		return preis; 
	}
	

	/**
	 * @return the status
	 */
	public String getStatus() {
		return status;
	}

	/**
	 * @param status the status to set
	 */
	public void setStatus(String status) {
		this.status = status;
	}

	/**
	 * @return the versandkosten
	 */
	public double getVersandkosten() {
		return versandkosten;
	}

	/**
	 * @param versandkosten the versandkosten to set
	 */
	public void setVersandkosten(double versandkosten) {
		this.versandkosten = versandkosten;
	}

	/**
	 * @return the bestelldatum
	 */
	public Datum getBestelldatum() {
		return bestelldatum;
	}

	/**
	 * @param bestelldatum the bestelldatum to set
	 */
	public void setBestelldatum(Datum bestelldatum) {
		this.bestelldatum = bestelldatum;
	}

	/**
	 * @return the auftraggeber
	 */
	public Kunde getAuftraggeber() {
		return auftraggeber;
	}

	/**
	 * @param auftraggeber the auftraggeber to set
	 */
	public void setAuftraggeber(Kunde auftraggeber) {
		this.auftraggeber = auftraggeber;
	}

	/**
	 * @return the sachbearbeiter
	 */
	public Mitarbeiter getSachbearbeiter() {
		return sachbearbeiter;
	}

	/**
	 * @param sachbearbeiter the sachbearbeiter to set
	 */
	public void setSachbearbeiter(Mitarbeiter sachbearbeiter) {
		this.sachbearbeiter = sachbearbeiter;
	}

	/**
	 * @return the auftragsnummer
	 */
	public int getAuftragsnummer() {
		return auftragsnummer;
	}

	/**
	 * referenz auf die posten!
	 * @return the posten
	 */
	public List<Bestellposten> getPosten() {
		return posten;
	}
	
	
	
	
	public String toString(){
		return String.format("Bestellung:[Nr:%d, Datum:%s, Status:%s, %s, %s]", this.auftragsnummer, this.bestelldatum, this.status, this.auftraggeber,this.posten);
	}
	
	
	//
	// PDF Geraffel
	//
	
	public void schreibeRechnungspdf() throws DocumentException, MalformedURLException, IOException{
		
		File file = new File("Rechnung_" + auftragsnummer + ".pdf");
		
		Document doc = new Document();
		
		PdfWriter.getInstance(doc, new FileOutputStream(file));
		
		doc.open();
		addMetaData(doc);
		addContent(doc);
		addLogo(doc);
		doc.close();
	}
	
	private void addLogo(Document doc) throws DocumentException, MalformedURLException, IOException {
		
		Image logo = new Jpeg(new File("/home/andris/Wurst.jpg").toURI().toURL());
		
		logo.scaleToFit(50, 50);
		logo.setAbsolutePosition(doc.left(), doc.top()-50);
		doc.add(logo);
		
	}


	private void addContent(Document doc) throws DocumentException {
		

		
		Paragraph par = new Paragraph("Foo Firma\nStrasse 17\n98755 NeStadt");
		par.setAlignment(Paragraph.ALIGN_RIGHT);
		doc.add(par);
		doc.add(new Paragraph(" \n \n "));
		
		Paragraph anschrift = new Paragraph("Firma Bar\nKlaus Mustermann\nStrasse 25\n12345 EinDorf\n ");
		doc.add(anschrift);
		
		Paragraph betreff = new Paragraph("Rechnung R1857328\n ");
		Font schrift = betreff.getFont();
		schrift.setStyle(Font.BOLD);
		betreff.setFont(schrift);
		
		
		com.itextpdf.text.List list = new com.itextpdf.text.List(true);
		
		list.add("blllaaaa\nSAJFKJAFKJ");
		list.add("bbllluuuuuub\nAKEHEKGKJD");
		list.setAutoindent(true);
		list.setAlignindent(true);
		list.setIndentationLeft(schrift.getCalculatedLeading(2));


		doc.add(betreff);
		doc.add(list);
		doc.add(new Paragraph(" "));
		
		
	}


	private void addMetaData(Document doc) {
		doc.addTitle("Rechnung " + auftragsnummer);
		doc.addCreator("Firma so und so");
		doc.addAuthor(sachbearbeiter.getName().toString());
		doc.addSubject("Rechnung");
		
	}
	
}
